package fiuba.td.fabrica.model.entities;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import fiuba.td.fabrica.model.entities.Maquina;
import fiuba.td.fabrica.model.entities.Producto;
import fiuba.td.fabrica.model.exceptions.ConectableAveriadoException;
import fiuba.td.fabrica.model.exceptions.MaquinaNoCambiaEstadoProductoException;

/**
 * Testing sobre la clase MaquinaCalidad 
 */
public abstract class MaquinaTestAbstract  extends TestCase {

	private Producto producto;
	private Maquina maquina;

	@Before
	public void setUp() throws Exception {
		producto = new Producto("Ceramica", 10.0, 10);
		maquina = this.getMaquinaTest();
	}

	@After
	public void tearDown() throws Exception {
		producto = null;
		maquina = null;
	}

	/**
	 * La maquina esta averiada
	 */
	@Test
	public void testIsAveriada() {
		this.maquina.setEfectividad(0);
		assertTrue(maquina.isAveriada());
	}
	
	/**
	 * Ejecuta la operacion de la maquina sobre el producto 
	 */
	public void operar (){
		try {
			maquina.operar(producto);
		} catch (ConectableAveriadoException e) {
			System.out.println(e.getMessage());
		} catch (MaquinaNoCambiaEstadoProductoException e) {
			System.out.println(e.getMessage());
		}
	}
	
	/**
	 * Define la maquina segun la herencia correspondiente
	 * @return Maquina
	 */
	public abstract Maquina getMaquinaTest ();

	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public Maquina getMaquina() {
		return maquina;
	}

	public void setMaquina(Maquina maquina) {
		this.maquina = maquina;
	}
	
}
